package report


/**
 * Classe de serviço oferecida para manipulação de planejamentos no sistema.
 * 
 * @author Vítor Avelino - vitor88@gmail.com
 *
 */
class PlanService {
	
	/**
	 * Retorna lista de planejamentos de acordo com os parâmetros que lhe são passados.
	 * 
	 * @param 	params 	Mapa que contém os parâmetros da consulta
	 * @return 	l 		Lista de planejamentos
	 */
	def getPlans(params) {
		return Plan.list(params)
	}
	
	/**
	 * Retorna o número de planejamentos armazenadas no sistema.
	 * 
	 * @return n Número de planejamentos
	 */
	def getNumberPlans() {
		return Plan.count()
	}
	
	/**
	 * Salva o planejamento no banco de dados do sistema.
	 * 
	 * @param 	plan 			Atividade a ser salva
	 * @return	null 			Caso os dados do planejamento não sejam validados
	 * 							ou aconteça algum erro durante a operação
	 * 			planejamento 	Caso contrário
	 * 	
	 */
	def save(plan) {
		if (plan.validate()) {
			if (plan.id) {
				def oldActivities = Activity.findAllByPlan(plan)
				oldActivities.each { 
					if (!plan.activities.contains(it)) {
						it.plan = null
						it.save(flush: true)
					}
				} 
			}
			return plan.save(flush: true)
		}
		return null
	}
	
	/**
	 * Retorna planejamento pelo id armazenado no sistema.
	 *  
	 * @param 	id 				Id do planejamento
	 * @return 	null  			Caso o id seja inexistente
	 * 			planejamento 	Caso contrário
	 */
	def getPlanById(id) {
		return Plan.get(id)
	}
	
	/**
	 * Remove planejamento armazenado no sistema passado como argumento.
	 * 
	 * @param 	plan 	Atividade a ser removida
	 * @return	null 	Caso ocorra algum erro durante remoção
	 * 			true 	Caso contrário
	 */
	def delete(plan) {
		def oldActivities = Activity.findAllByPlan(plan)
		oldActivities.each { 
			if (plan.activities.contains(it)) {
				it.plan = null
				it.save(flush: true)
			}
		}
		return plan.delete(flush: true)
	}
	
}
